# coding:utf-8

"""
游戏的主程序 调用 机器人的 Q Learning 决策大脑 和 Maze 环境
"""

from env import Maze
from q_learning import QLearning


def update():
    for episode in range(100):
        # 初始化 state(状态)
        state = env.reset()
        # 记录走过的步数
        step_count = 0
        while True:
            # 更新可视化环境
            env.render()

            # RL 大脑根据 state 挑选 action
            action = RL.choose_action(str(state))

            # 探索者 在环境中 实施 action  并得到环境返回的 下一个 state  reward  done
            state_, reward, done = env.step(action)
            step_count += 1

            # RL 从这个序列(state, action, reward, state_) 中学习
            RL.learn(str(state), action, reward, str(state_))

            # 将下一个 state 的值 传到下一次循环
            state = state_

            # 如果踩到 炸弹或者 宝藏 这回和结束
            if done:
                print("回合 {} 结束， 总步数： {} \n".format(episode + 1, step_count))
                break
    # 结束游戏 并关闭窗口
    print("游戏结束")
    env.destory()


if __name__ == '__main__':
    # 创建 环境 env  和 RL
    env = Maze()
    RL = QLearning(actions=list(range(env.n_actions)))

    # 开始可视化环境
    env.after(100, update)
    env.mainloop()

    print("\n Q 表:")
    print(RL.q_table)
